package com.sugon.modules.utils;

import java.util.List;

/**
 * @author ： YuXD
 * @description： 字符串工具类
 * @date ： 2020-09-17 下午 7:58
 * @version: 1.0
 */
public class StrUtil {

    /**
     * 拼接批处理WHERESQL的方法
     * ["aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg"] -> ID IN('aaa','bbb') OR ID IN('ccc','ddd') OR ID IN('eee','fff') OR ID IN('ggg')
     *
     * @param msgList
     * @param fieldName      字段名称
     * @param batchMaxLength 批处理一次性处理的最大条数
     * @return
     */
    public static String generateBatchSql(List<String> msgList, String fieldName, int batchMaxLength) {

        // 拼接次数
        int times = msgList.size() % batchMaxLength == 0 ? msgList.size() / batchMaxLength : msgList.size() / batchMaxLength + 1;
        int msgNum = msgList.size();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < times; i++) {
            if (i != 0) {
                sb.append(" OR ");
            }
            sb.append(fieldName + " IN(");
            int maxNum = batchMaxLength * (i + 1) > msgNum ? msgNum : batchMaxLength * (i + 1);

            for (int j = batchMaxLength * i; j < maxNum; j++) {
                sb.append("'").append(msgList.get(j)).append("'");
                if (j != maxNum - 1) {
                    sb.append(",");
                }
            }
            sb.append(")");
        }
        return sb.toString();
    }

    /**
     * 对字符串进行空处理
     *
     * @param value
     * @return
     */
    public static String doEmptyHandle(String value) {
        if (value == null || cn.hutool.core.util.StrUtil.isEmpty(value = value.trim())) {
            return null;
        }
        return value;
    }

    /**
     * 对原始字符串进行值新增
     *
     * @param root         原始字符串
     * @param prefix       字符串前缀
     * @param suffixLength 后缀长度
     * @param step         步长
     * @return
     */
    public static String increase(String root, String prefix, int suffixLength, int step) {
        if (root == null || prefix.startsWith(root)) {
            root = "";
        }
        String format = "%0" + suffixLength + "d";
        if (cn.hutool.core.util.StrUtil.isEmpty(root)) {
            return prefix + String.format(format, 1);
        }
        return prefix + String.format(format, step += Integer.parseInt(root.replaceFirst(prefix, "")));
    }

}
